iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0
Software Development

RISC-V 與處理器之架構學習及應用系列 第 8

[Day08] RISC-V 決策和邏輯運算

  • 分享至 

  • xImage
  •  

一、Decision Making

  1. 基本概念:

    • Decision making 是在 RISC-V 程式中基於某個計算結果決定接下來執行哪一段 code。
    • 在程式語言中,這類操作通常使用 if 語句來表示,而在 RISC-V 中使用 branch 指令。
    • beq (branch if equal):當兩個 registers 的值相等時跳轉到指定的標籤,例如 beq reg1, reg2, L1
    • bne (branch if not equal):當兩個 registers 的值不相等時跳轉。
  2. Branch 類型:

    • Conditional branches(條件分支): 根據比較結果改變程式流程,例如 beqbne,還有比較數字大小的 blt (branch if less than) 和 bge (branch if greater than or equal)。
    • Unconditional branches(無條件分支): 總是會跳轉,使用指令 j Label
  3. 範例:

    • 如果 i == j,則執行加法運算,否則執行減法運算的 if-else 語句:
      if (i == j)   bne x13, x14, Else
      f = g + h;   add x10, x11, x12 
      else   j Exit 
      f = g - h; Else: sub x10, x11, x12
      Exit: 
      
  4. 比較運算:

    • RISC-V 提供多種比較指令來測試數值大小,例如 blt (比較是否小於) 和 bge (比較是否大於或等於),還有對無符號數的比較指令 bltubgeu

二、Logical Instructions

  1. Logical Instructions 簡介:

    • Logical instructions 在 RISC-V 中被用來對位元進行操作,例如字元的位元組 (8 bits) 操作。
    • 這類指令可以壓縮和解壓縮位元到不同的字元。
  2. 常見指令:

    • Bitwise AND (andandi): 將兩個 registers 的位元進行 AND 操作,and 是 registers 之間的操作,而 andi 則與立即數進行 AND 操作。
      • 例子:and x5, x6, x7 (x5 = x6 和 x7 的位元相交)
    • Bitwise OR (orori): 進行位元的 OR 操作。
    • XOR (xorxori): 進行 XOR 操作,位元不同為 1,相同為 0。
    • Shift Operations (sll, srl, sra):
      • sll (shift left logical):左移位,將位元往左移,並在右邊補 0。
      • srl (shift right logical):右移位,將位元往右移,左邊補 0。
      • sra (shift right arithmetic):右移位,但左邊補上符號位。
  3. 沒有 NOT 指令:

    • RISC-V 沒有直接的 not 指令,但可以使用 xor 與全 1 的值來達成邏輯反轉效果。
  4. 範例:

    • 將 x12 左移 2 個位元:
      slli x11, x12, 2 # x11 = x12 << 2
      

三、A Bit About Machine Program

  1. Assembler 到 Machine Code:

    • Assembler 會將人類可讀的組合語言轉換成指令的位元模式。Source files(如 foo.Sbar.S)會被轉換成對應的 Machine Code 的 object files(對象文件)(如 foo.obar.o)。
  2. 程式的儲存:

    • 一個 RISC-V 指令的長度為 32 bits,儲存在記憶體中。程式計數器 (PC) 是一個 register,保存即將執行的下一條指令的位址。
  3. 程式執行:

    • 每一條指令會從記憶體中取回,然後控制單元會執行指令,並根據指令來更新 PC(通常是加 4 個位元組來進行順序執行,但對於分支指令和跳轉指令,則會根據相應的目標位址進行更新)。
  4. Virtual Register 名稱:

    • RISC-V 提供一些 Virtual Register 名稱來簡化編程,如函數呼叫時使用的 argument registers a0-a7,對應的 physical registers 為 x10-x17
  5. Pseudo Instructions:

    • RISC-V 還有一些 Pseudo Instructions,這些是對常用 assembly language 操作的簡寫,例如:
      • mv rd, rs = addi rd, rs, 0
      • li rd, 13 = addi rd, x0, 13
      • nop = addi x0, x0, 0

上一篇
[Day07] RISC-V Data Transfer 資料轉移
下一篇
[Day09] RISC-V Procedures
系列文
RISC-V 與處理器之架構學習及應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言